java

design parttern

单例模式

设计模式-单例模式

单例模式主要作用是保证java应用程序中,一个类只有一个实例存在

主要解决:一个全局使用的类频繁地创建和销毁

何时使用: 当我想控制实例的数目,节省系统资源的时候

关键代码:构造函数是私有的

应用实例:一些设备管理器常常用单例模式,比如一个电脑有两台打印机, 在输出的时候就要处理不能两台打印机打印同一个文件

public class SingleObject {

   //创建 SingleObject 的一个对象
   private static SingleObject instance = new SingleObject();

   //让构造函数为 private,这样该类就不会被实例化
   private SingleObject(){}

   //获取唯一可用的对象
   public static SingleObject getInstance(){
      return instance;
   }

   public void showMessage(){
      System.out.println("Hello World!");
   }
}

工厂模式

主要解决: 主要解决接口选择的问题

何时使用: 系统的产品有多于一个的产品族, 而系统只消费其中某一族的产品
如何解决: 在一个产品族里面, 定义多个产品

  • step 1 为形状创建一个接口
public interface  Shape{
  void draw();
}
  • step 2 创建实现接口的实体类

Rectangle.java

public class Rectangle implements Shape{
    @Override
    public void draw() {
       System.out.println("Inside Rectangle : draw() method.");
  }
}

Square.java

public class Square implements Shape{
    @Override
    public void draw() {
      System.out.println() ;
    }
}

Circle.java
public class Square implements Shape {
    @Override
    public void draw() {
            System.out.println();
    }
}
  • step 3 为颜色创建一个接口
public interface  Color {
        void fill();
}
  • step 4 创建实现接口的实体类
Red.java

public class Red implements Color {
    @Override
    public void fill() {
        System.out.println();
    }
}

Green.java

public class Green implements Color {
   @Override
   public void fill() {
      System.out.println();
   }    
}

Blue.java

public class Blue implements Color{ 
      @Override
      public void fill() {
         System.out.println();      
     }
}
  • step 5

为Color和Shape 对象创建抽象类来获取工厂 AbstractFactory.java

public abstract class AbstractFactory{
        abstract Color getColor(String color);
        abstract Shape getShape(String shape);
}
  • step 6
ShapeFactory.java

public class ShapeFactory extends AbstractFactory{

        @Override
        public Shape getShape(String shapeType) {
           if(shapeType == null) {
                return null;
           }
           if(shapeType.equalsIgnoreCase("CIRCLE")) {
                   return new Circle(); // 因为circle是一个类,实现了shape接口,所以可以实例化返回
           }else if(shapeType.equalsIgnoreCase("RECTANGLE")){
                  return new Rectangle();   
           }else if(shapeType.equalsIgnoreCase("SQUARE")) {
                   return new Square();
           }
            return null;
        }
        @Override 
        Color getColor(String color) {
          return null;
        }
}
ColorFactory.java

public class ColorFactory extends AbstractFactory{
        @Override
        public Shape getShapes(String shapeType){
                return null;
        }

        @Override 
        Color getColor(String color) {

        }

        @Override
        Color getColor(String color) {
         if(color == null) {
              return null;
         }
         if(color.equalsIgnoreCase("GREEN")) {
            return new Green();
          }else if(color.equalsIgnoreCase("BLUE")) {
            return new Blue(); 
          }
          return null;
        }
}

results matching ""

    No results matching ""